// loggers/loggers.go
package loggers

import (
	"log"
	"os"
	"sync"

	"gitee.com/chuanjinge/go-container/pkg/dirfile"
)

var (
	loggersInstance *Loggers
	once            sync.Once
)

type Loggers struct {
	LoggerRun *log.Logger // LoggerRun 使用追加模式
	Config    *Config
}

// Config holds the configuration for creating loggers.
type Config struct {
	RunFilePath string // 日志文件路径，追加模式
}

func InitializeLoggers(config Config) error {
	var err error
	once.Do(func() {
		// 确保日志文件目录存在。
		if err := dirfile.EnsureDirExists(config.RunFilePath); err != nil {
			return
		}

		// 初始化 LoggerRun（追加模式）。
		fileRun, err := os.OpenFile(config.RunFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
		if err != nil {
			return
		}
		loggerRun := log.New(fileRun, "RUN: ", log.Ldate|log.Ltime|log.Lshortfile)

		loggersInstance = &Loggers{
			LoggerRun: loggerRun,
			Config:    &config,
		}
	})
	return err
}

func GetLoggers() *Loggers {
	return loggersInstance
}

func CloseAllLogger() {
	if loggersInstance != nil {
		loggersInstance.LoggerRun.SetOutput(nil)
	}
}
